package cn.iocoder.yudao.module.erp.service.dpitem;

import cn.iocoder.yudao.module.erp.dal.dataobject.dpitem.DpItemDnDO;
import cn.iocoder.yudao.module.erp.dal.dataobject.dpitem.DpItemGzDO;
import cn.iocoder.yudao.module.erp.dal.dataobject.dpitem.DpItemWlmqDO;
import cn.iocoder.yudao.module.erp.dal.dataobject.dpitem.DpItemYwDO;
import cn.iocoder.yudao.module.erp.dal.mysql.dpitem.DpItemDnMapper;
import cn.iocoder.yudao.module.erp.dal.mysql.dpitem.DpItemGzMapper;
import cn.iocoder.yudao.module.erp.dal.mysql.dpitem.DpItemWlmqMapper;
import cn.iocoder.yudao.module.erp.dal.mysql.dpitem.DpItemYwMapper;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
import org.springframework.validation.annotation.Validated;

import cn.iocoder.yudao.module.erp.controller.admin.dpitem.vo.*;
import cn.iocoder.yudao.module.erp.dal.dataobject.dpitem.DpItemDO;
import cn.iocoder.yudao.framework.common.pojo.PageResult;
import cn.iocoder.yudao.framework.common.util.object.BeanUtils;
import cn.iocoder.yudao.module.erp.dal.mysql.dpitem.DpItemMapper;

import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception;
import static cn.iocoder.yudao.module.erp.enums.ErrorCodeConstants.*;

/**
 * ERP总制单货号详情 Service 实现类
 * @author 天使管理员
 */
@Service
@Validated
public class DpItemServiceImpl implements DpItemService {

    @Resource
    private DpItemMapper dpItemMapper;
    @Resource
    private DpItemDnMapper dpItemDnMapper;
    @Resource
    private DpItemGzMapper dpItemGzMapper;
    @Resource
    private DpItemWlmqMapper dpItemWlmqMapper;
    @Resource
    private DpItemYwMapper dpItemYwMapper;

    @Override
    public Long createDpItem(DpItemSaveReqVO createReqVO) {
        // 插入
        DpItemDO dpItem = BeanUtils.toBean(createReqVO, DpItemDO.class);
        dpItemMapper.insert(dpItem);
        // 返回
        return dpItem.getId();
    }

    @Override
    public void updateDpItem(DpItemSaveReqVO updateReqVO) {
        String no = updateReqVO.getNo();
        // 提取前两个字符
        String prefix = no.substring(0, 2).toUpperCase();
        Long id = updateReqVO.getId();
        // 根据前缀路由到不同仓库逻辑
        switch (prefix) {
            case "YW": // 义乌仓库
                DpItemYwDO updateObjYw = BeanUtils.toBean(updateReqVO, DpItemYwDO.class);
                dpItemYwMapper.updateById(updateObjYw);
            case "DN": // 东宁仓库
                DpItemDnDO updateObjDn = BeanUtils.toBean(updateReqVO, DpItemDnDO.class);
                dpItemDnMapper.updateById(updateObjDn);
            case "GZ": // 广州仓库
                DpItemGzDO updateObjGz = BeanUtils.toBean(updateReqVO, DpItemGzDO.class);
                dpItemGzMapper.updateById(updateObjGz);
            case "WL": // 乌鲁木齐仓库
                DpItemWlmqDO updateObjWlmq = BeanUtils.toBean(updateReqVO, DpItemWlmqDO.class);
                dpItemWlmqMapper.updateById(updateObjWlmq);
            default:
                throw new IllegalArgumentException("无效的仓库：" + prefix);
        }
    }

    @Override
    public void deleteDpItem(Long id, String no) {
        // 提取前两个字符
        String prefix = no.substring(0, 2).toUpperCase();
        // 根据前缀路由到不同仓库逻辑
        switch (prefix) {
            case "YW": // 义乌仓库
                // 删除
                dpItemYwMapper.deleteById(id);
            case "DN": // 东宁仓库
                // 删除
                dpItemDnMapper.deleteById(id);
            case "GZ": // 广州仓库
                // 删除
                dpItemGzMapper.deleteById(id);
            case "WL": // 乌鲁木齐仓库
                // 删除
                dpItemWlmqMapper.deleteById(id);
            default:
                throw new IllegalArgumentException("无效的仓库：" + prefix);
        }
    }

    @Override
    public DpItemDO getDpItem(Long id) {
        return dpItemMapper.selectById(id);
    }

    @Override
    public PageResult<DpItemDO> getDpItemPage(DpItemPageReqVO pageReqVO) {
        return dpItemMapper.selectPage(pageReqVO);
    }

}